home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / formatter.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  15KB  |  563 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import sys
  5. AS_IS = None
  6.  
  7. class NullFormatter:
  8.     
  9.     def __init__(self, writer = None):
  10.         if writer is None:
  11.             writer = NullWriter()
  12.         
  13.         self.writer = writer
  14.  
  15.     
  16.     def end_paragraph(self, blankline):
  17.         pass
  18.  
  19.     
  20.     def add_line_break(self):
  21.         pass
  22.  
  23.     
  24.     def add_hor_rule(self, *args, **kw):
  25.         pass
  26.  
  27.     
  28.     def add_label_data(self, format, counter, blankline = None):
  29.         pass
  30.  
  31.     
  32.     def add_flowing_data(self, data):
  33.         pass
  34.  
  35.     
  36.     def add_literal_data(self, data):
  37.         pass
  38.  
  39.     
  40.     def flush_softspace(self):
  41.         pass
  42.  
  43.     
  44.     def push_alignment(self, align):
  45.         pass
  46.  
  47.     
  48.     def pop_alignment(self):
  49.         pass
  50.  
  51.     
  52.     def push_font(self, x):
  53.         pass
  54.  
  55.     
  56.     def pop_font(self):
  57.         pass
  58.  
  59.     
  60.     def push_margin(self, margin):
  61.         pass
  62.  
  63.     
  64.     def pop_margin(self):
  65.         pass
  66.  
  67.     
  68.     def set_spacing(self, spacing):
  69.         pass
  70.  
  71.     
  72.     def push_style(self, *styles):
  73.         pass
  74.  
  75.     
  76.     def pop_style(self, n = 1):
  77.         pass
  78.  
  79.     
  80.     def assert_line_data(self, flag = 1):
  81.         pass
  82.  
  83.  
  84.  
  85. class AbstractFormatter:
  86.     
  87.     def __init__(self, writer):
  88.         self.writer = writer
  89.         self.align = None
  90.         self.align_stack = []
  91.         self.font_stack = []
  92.         self.margin_stack = []
  93.         self.spacing = None
  94.         self.style_stack = []
  95.         self.nospace = 1
  96.         self.softspace = 0
  97.         self.para_end = 1
  98.         self.parskip = 0
  99.         self.hard_break = 1
  100.         self.have_label = 0
  101.  
  102.     
  103.     def end_paragraph(self, blankline):
  104.         if not self.hard_break:
  105.             self.writer.send_line_break()
  106.             self.have_label = 0
  107.         
  108.         if self.parskip < blankline and not (self.have_label):
  109.             self.writer.send_paragraph(blankline - self.parskip)
  110.             self.parskip = blankline
  111.             self.have_label = 0
  112.         
  113.         self.hard_break = self.nospace = self.para_end = 1
  114.         self.softspace = 0
  115.  
  116.     
  117.     def add_line_break(self):
  118.         if not self.hard_break or self.para_end:
  119.             self.writer.send_line_break()
  120.             self.have_label = self.parskip = 0
  121.         
  122.         self.hard_break = self.nospace = 1
  123.         self.softspace = 0
  124.  
  125.     
  126.     def add_hor_rule(self, *args, **kw):
  127.         if not self.hard_break:
  128.             self.writer.send_line_break()
  129.         
  130.         self.writer.send_hor_rule(*args, **kw)
  131.         self.hard_break = self.nospace = 1
  132.         self.have_label = self.para_end = self.softspace = self.parskip = 0
  133.  
  134.     
  135.     def add_label_data(self, format, counter, blankline = None):
  136.         if self.have_label or not (self.hard_break):
  137.             self.writer.send_line_break()
  138.         
  139.         if not self.para_end:
  140.             if not blankline or 1:
  141.                 pass
  142.             self.writer.send_paragraph(0)
  143.         
  144.         if isinstance(format, str):
  145.             self.writer.send_label_data(self.format_counter(format, counter))
  146.         else:
  147.             self.writer.send_label_data(format)
  148.         self.nospace = self.have_label = self.hard_break = self.para_end = 1
  149.         self.softspace = self.parskip = 0
  150.  
  151.     
  152.     def format_counter(self, format, counter):
  153.         label = ''
  154.         for c in format:
  155.             None if c == '1' else counter > 0
  156.             if c in 'iI':
  157.                 if counter > 0:
  158.                     label = label + self.format_roman(c, counter)
  159.                 
  160.             counter > 0
  161.             label = label + c
  162.         
  163.         return label
  164.  
  165.     
  166.     def format_letter(self, case, counter):
  167.         label = ''
  168.         while counter > 0:
  169.             (counter, x) = divmod(counter - 1, 26)
  170.             s = chr(ord(case) + x)
  171.             label = s + label
  172.         return label
  173.  
  174.     
  175.     def format_roman(self, case, counter):
  176.         ones = [
  177.             'i',
  178.             'x',
  179.             'c',
  180.             'm']
  181.         fives = [
  182.             'v',
  183.             'l',
  184.             'd']
  185.         (label, index) = ('', 0)
  186.         while counter > 0:
  187.             (counter, x) = divmod(counter, 10)
  188.             if x == 9:
  189.                 label = ones[index] + ones[index + 1] + label
  190.             elif x == 4:
  191.                 label = ones[index] + fives[index] + label
  192.             elif x >= 5:
  193.                 s = fives[index]
  194.                 x = x - 5
  195.             else:
  196.                 s = ''
  197.             s = s + ones[index] * x
  198.             label = s + label
  199.             index = index + 1
  200.         if case == 'I':
  201.             return label.upper()
  202.         
  203.         return label
  204.  
  205.     
  206.     def add_flowing_data(self, data):
  207.         if not data:
  208.             return None
  209.         
  210.         prespace = data[:1].isspace()
  211.         postspace = data[-1:].isspace()
  212.         data = ' '.join(data.split())
  213.         if self.nospace and not data:
  214.             return None
  215.         elif prespace or self.softspace:
  216.             if not data:
  217.                 if not self.nospace:
  218.                     self.softspace = 1
  219.                     self.parskip = 0
  220.                 
  221.                 return None
  222.             
  223.             if not self.nospace:
  224.                 data = ' ' + data
  225.             
  226.         
  227.         self.hard_break = self.nospace = self.para_end = self.parskip = self.have_label = 0
  228.         self.softspace = postspace
  229.         self.writer.send_flowing_data(data)
  230.  
  231.     
  232.     def add_literal_data(self, data):
  233.         if not data:
  234.             return None
  235.         
  236.         if self.softspace:
  237.             self.writer.send_flowing_data(' ')
  238.         
  239.         self.hard_break = data[-1:] == '\n'
  240.         self.nospace = self.para_end = self.softspace = self.parskip = self.have_label = 0
  241.         self.writer.send_literal_data(data)
  242.  
  243.     
  244.     def flush_softspace(self):
  245.         if self.softspace:
  246.             self.hard_break = self.para_end = self.parskip = self.have_label = self.softspace = 0
  247.             self.nospace = 1
  248.             self.writer.send_flowing_data(' ')
  249.         
  250.  
  251.     
  252.     def push_alignment(self, align):
  253.         if align and align != self.align:
  254.             self.writer.new_alignment(align)
  255.             self.align = align
  256.             self.align_stack.append(align)
  257.         else:
  258.             self.align_stack.append(self.align)
  259.  
  260.     
  261.     def pop_alignment(self):
  262.         if self.align_stack:
  263.             del self.align_stack[-1]
  264.         
  265.         if self.align_stack:
  266.             self.align = align = self.align_stack[-1]
  267.             self.writer.new_alignment(align)
  268.         else:
  269.             self.align = None
  270.             self.writer.new_alignment(None)
  271.  
  272.     
  273.     def push_font(self, .1):
  274.         (size, i, b, tt) = .1
  275.         if self.softspace:
  276.             self.hard_break = self.para_end = self.softspace = 0
  277.             self.nospace = 1
  278.             self.writer.send_flowing_data(' ')
  279.         
  280.         if self.font_stack:
  281.             (csize, ci, cb, ctt) = self.font_stack[-1]
  282.             if size is AS_IS:
  283.                 size = csize
  284.             
  285.             if i is AS_IS:
  286.                 i = ci
  287.             
  288.             if b is AS_IS:
  289.                 b = cb
  290.             
  291.             if tt is AS_IS:
  292.                 tt = ctt
  293.             
  294.         
  295.         font = (size, i, b, tt)
  296.         self.font_stack.append(font)
  297.         self.writer.new_font(font)
  298.  
  299.     
  300.     def pop_font(self):
  301.         if self.font_stack:
  302.             del self.font_stack[-1]
  303.         
  304.         if self.font_stack:
  305.             font = self.font_stack[-1]
  306.         else:
  307.             font = None
  308.         self.writer.new_font(font)
  309.  
  310.     
  311.     def push_margin(self, margin):
  312.         self.margin_stack.append(margin)
  313.         fstack = filter(None, self.margin_stack)
  314.         if not margin and fstack:
  315.             margin = fstack[-1]
  316.         
  317.         self.writer.new_margin(margin, len(fstack))
  318.  
  319.     
  320.     def pop_margin(self):
  321.         if self.margin_stack:
  322.             del self.margin_stack[-1]
  323.         
  324.         fstack = filter(None, self.margin_stack)
  325.         if fstack:
  326.             margin = fstack[-1]
  327.         else:
  328.             margin = None
  329.         self.writer.new_margin(margin, len(fstack))
  330.  
  331.     
  332.     def set_spacing(self, spacing):
  333.         self.spacing = spacing
  334.         self.writer.new_spacing(spacing)
  335.  
  336.     
  337.     def push_style(self, *styles):
  338.         if self.softspace:
  339.             self.hard_break = self.para_end = self.softspace = 0
  340.             self.nospace = 1
  341.             self.writer.send_flowing_data(' ')
  342.         
  343.         for style in styles:
  344.             self.style_stack.append(style)
  345.         
  346.         self.writer.new_styles(tuple(self.style_stack))
  347.  
  348.     
  349.     def pop_style(self, n = 1):
  350.         del self.style_stack[-n:]
  351.         self.writer.new_styles(tuple(self.style_stack))
  352.  
  353.     
  354.     def assert_line_data(self, flag = 1):
  355.         self.nospace = self.hard_break = not flag
  356.         self.para_end = self.parskip = self.have_label = 0
  357.  
  358.  
  359.  
  360. class NullWriter:
  361.     
  362.     def __init__(self):
  363.         pass
  364.  
  365.     
  366.     def flush(self):
  367.         pass
  368.  
  369.     
  370.     def new_alignment(self, align):
  371.         pass
  372.  
  373.     
  374.     def new_font(self, font):
  375.         pass
  376.  
  377.     
  378.     def new_margin(self, margin, level):
  379.         pass
  380.  
  381.     
  382.     def new_spacing(self, spacing):
  383.         pass
  384.  
  385.     
  386.     def new_styles(self, styles):
  387.         pass
  388.  
  389.     
  390.     def send_paragraph(self, blankline):
  391.         pass
  392.  
  393.     
  394.     def send_line_break(self):
  395.         pass
  396.  
  397.     
  398.     def send_hor_rule(self, *args, **kw):
  399.         pass
  400.  
  401.     
  402.     def send_label_data(self, data):
  403.         pass
  404.  
  405.     
  406.     def send_flowing_data(self, data):
  407.         pass
  408.  
  409.     
  410.     def send_literal_data(self, data):
  411.         pass
  412.  
  413.  
  414.  
  415. class AbstractWriter(NullWriter):
  416.     
  417.     def new_alignment(self, align):
  418.         print 'new_alignment(%r)' % (align,)
  419.  
  420.     
  421.     def new_font(self, font):
  422.         print 'new_font(%r)' % (font,)
  423.  
  424.     
  425.     def new_margin(self, margin, level):
  426.         print 'new_margin(%r, %d)' % (margin, level)
  427.  
  428.     
  429.     def new_spacing(self, spacing):
  430.         print 'new_spacing(%r)' % (spacing,)
  431.  
  432.     
  433.     def new_styles(self, styles):
  434.         print 'new_styles(%r)' % (styles,)
  435.  
  436.     
  437.     def send_paragraph(self, blankline):
  438.         print 'send_paragraph(%r)' % (blankline,)
  439.  
  440.     
  441.     def send_line_break(self):
  442.         print 'send_line_break()'
  443.  
  444.     
  445.     def send_hor_rule(self, *args, **kw):
  446.         print 'send_hor_rule()'
  447.  
  448.     
  449.     def send_label_data(self, data):
  450.         print 'send_label_data(%r)' % (data,)
  451.  
  452.     
  453.     def send_flowing_data(self, data):
  454.         print 'send_flowing_data(%r)' % (data,)
  455.  
  456.     
  457.     def send_literal_data(self, data):
  458.         print 'send_literal_data(%r)' % (data,)
  459.  
  460.  
  461.  
  462. class DumbWriter(NullWriter):
  463.     
  464.     def __init__(self, file = None, maxcol = 72):
  465.         if not file:
  466.             pass
  467.         self.file = sys.stdout
  468.         self.maxcol = maxcol
  469.         NullWriter.__init__(self)
  470.         self.reset()
  471.  
  472.     
  473.     def reset(self):
  474.         self.col = 0
  475.         self.atbreak = 0
  476.  
  477.     
  478.     def send_paragraph(self, blankline):
  479.         self.file.write('\n' * blankline)
  480.         self.col = 0
  481.         self.atbreak = 0
  482.  
  483.     
  484.     def send_line_break(self):
  485.         self.file.write('\n')
  486.         self.col = 0
  487.         self.atbreak = 0
  488.  
  489.     
  490.     def send_hor_rule(self, *args, **kw):
  491.         self.file.write('\n')
  492.         self.file.write('-' * self.maxcol)
  493.         self.file.write('\n')
  494.         self.col = 0
  495.         self.atbreak = 0
  496.  
  497.     
  498.     def send_literal_data(self, data):
  499.         self.file.write(data)
  500.         i = data.rfind('\n')
  501.         if i >= 0:
  502.             self.col = 0
  503.             data = data[i + 1:]
  504.         
  505.         data = data.expandtabs()
  506.         self.col = self.col + len(data)
  507.         self.atbreak = 0
  508.  
  509.     
  510.     def send_flowing_data(self, data):
  511.         if not data:
  512.             return None
  513.         
  514.         if not self.atbreak:
  515.             pass
  516.         atbreak = data[0].isspace()
  517.         col = self.col
  518.         maxcol = self.maxcol
  519.         write = self.file.write
  520.         for word in data.split():
  521.             if atbreak:
  522.                 if col + len(word) >= maxcol:
  523.                     write('\n')
  524.                     col = 0
  525.                 else:
  526.                     write(' ')
  527.                     col = col + 1
  528.             
  529.             write(word)
  530.             col = col + len(word)
  531.             atbreak = 1
  532.         
  533.         self.col = col
  534.         self.atbreak = data[-1].isspace()
  535.  
  536.  
  537.  
  538. def test(file = None):
  539.     w = DumbWriter()
  540.     f = AbstractFormatter(w)
  541.     if file is not None:
  542.         fp = open(file)
  543.     elif sys.argv[1:]:
  544.         fp = open(sys.argv[1])
  545.     else:
  546.         fp = sys.stdin
  547.     while None:
  548.         line = fp.readline()
  549.         if not line:
  550.             break
  551.         
  552.         if line == '\n':
  553.             f.end_paragraph(1)
  554.             continue
  555.         f.add_flowing_data(line)
  556.         continue
  557.         f.end_paragraph(0)
  558.         return None
  559.  
  560. if __name__ == '__main__':
  561.     test()
  562.  
  563.